import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;

/**
 * Escribe una descrición de la clase Espadachin aquí.
 * 
 * @autor Andrés Cruz Santiago
 * @versión 22/10/13
 */
public class Espadachin extends Pirata
{
    /**
     * Cosntructor de Espadachín
     * @param unaDireccion Dirección del Pirata Espadachín
     */
    public Espadachin(int unaDireccion)
    {
        super(unaDireccion);
        timer = new SimpleTimer();
        timer.mark();
    }
    /**
     * Método actua
     */
    public void act()
    {
        super.act();
    }
   
    /**
     * Ataca al Chapulín, lanzándole Espadas
     */
    public void ataca()
    {
        if(timer.millisElapsed() > 4000)
        {
            timer.mark();
            Espada espada = new Espada(this);
            Greenfoot.playSound("espada.wav");
            this.getWorld().addObject(espada,this.getX(), this.getY()-15);
        } 
        persigue();
    }

    /**
     * Persigue al Chapulin, cuando este esta cerca del él
     */
    public void persigue()
    {        
        int rango=0;
        int desplazamiento=0;

        switch(dir)
        {
            case IZQ:
            desplazamiento=-1;
            rango=120;
            break;
            case DER:
            desplazamiento=1; 
            rango=120;
            break;
        }

        List aux = this.getObjectsInRange(rango,Chapulin.class);
        //List aux = this.getObjectsAtOffset(rango, 0, Chapulin.class);
        if(aux.size()!=0) 
        {
            if((((Actor)(aux.get(0))).getY() < (this.getY() + this.getImage().getHeight())) || (((Actor)(aux.get(0))).getY() < (this.getY() + this.getImage().getHeight())))
            {
                this.setLocation(this.getX()+desplazamiento,this.getY());
                if(((Actor)(aux.get(0))).getX() >= this.getX()) 
                {
                    if(this.getDireccion() == Direccion.IZQ)
                        this.getImage().mirrorHorizontally();
                    dir=Direccion.DER;
                }
                else
                {
                    if(this.getDireccion() == Direccion.DER)
                        this.getImage().mirrorHorizontally();
                    dir=Direccion.IZQ;
                }
            }
        }
    } 
    
    /**
     * Voltea a la Izquierda o la Derecha, dependiendo de la Dirección a la que esté
     */
    public void voltea()
    {

        if(this.getDireccion() == Direccion.IZQ)
            this.getImage().mirrorHorizontally();
    }
}
